package com.ndood.spider.tmall.processor;
//package cn.zjshangqi.tmall.processor;
//
//import java.io.UnsupportedEncodingException;
//import java.net.URLDecoder;
//import java.net.URLEncoder;
//import java.util.List;
//import java.util.Map;
//import java.util.regex.Matcher;
//import java.util.regex.Pattern;
//
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//
//import cn.zjshangqi.tmall.bean.TmallGoods;
//import cn.zjshangqi.tmall.downloader.SeleniumDownloader;
//import cn.zjshangqi.tmall.downloader.WebDriverPool;
//import cn.zjshangqi.tmall.downloader.action.impl.WebSeleniumAction;
//import cn.zjshangqi.tmall.pipeline.TmallPipeline;
//import cn.zjshangqi.util.HtmlStrUtil;
//import cn.zjshangqi.util.UrlStringUtil;
//import us.codecraft.webmagic.Page;
//import us.codecraft.webmagic.Site;
//import us.codecraft.webmagic.Spider;
//import us.codecraft.webmagic.processor.PageProcessor;
//import us.codecraft.webmagic.selector.Html;
//import us.codecraft.webmagic.selector.Selectable;
//
///**
// * 方案二
// */
//public class TmallPageProcessorPlus implements PageProcessor {
//	Logger logger = LoggerFactory.getLogger(getClass());
//
//	private Site site = Site.me().setCharset("UTF-8").setCycleRetryTimes(3).setSleepTime(3 * 1000)
//			.addHeader("Connection", "keep-alive").addHeader("Cache-Control", "max-age=0")
//			.setUserAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36");
//	
//	@Override
//	public Site getSite() {
//		return this.site;
//	}
//
//	@Override
//	public void process(Page page) {
//		System.out.println(page.getUrl());
//		System.out.println(page.getHtml());
//		// Step1: 处理列表页
//		if(page.getHtml().toString().contains("&quot;")){
//			System.out.println("jejhje");
//			Html newHtml = HtmlStrUtil.translate(page.getHtml().toString());
//			processGoodsList(newHtml,page);
//			return;
//		}
//
//		// Step2: 处理商品详情页
//		if (page.getHtml().xpath("//*[@id='J_DetailMeta']").get()!=null) {
//			System.out.println("aaaaaaaaa");
//			processGoodsDetail(page);
//			return;
//		}
//		
//	}
//	
//	/**
//	 * 处理列表页
//	 * @param newHtml
//	 * @param page
//	 */
//	private void processGoodsList(Html newHtml, Page page) {
//		// Step1: 处理非叶子节点
//		String oldUrl = page.getUrl().get();
//		if(newHtml.xpath("//html/body/div/form/div/div[@class='cateAttrs']/div[@class='j_tcate']").get()!=null){
//			List<Selectable> cats = newHtml.xpath("//html/body/div/form/div/div[@class='cateAttrs']/div[@class='j_tcate']/div[@class='attrValues']/ul/li").nodes();
//			for (int i = 0; i < cats.size(); i++) {
//				Selectable cat = cats.get(i);
//				String catUrl = cat.xpath("//*/a/@href").get();
//				// 提取出分类ID并生成新的url
//				Pattern p = Pattern.compile("category-([0-9]+).htm");
//				Matcher m = p.matcher(catUrl);
//				if(m.find()){
//					String catHtml = m.group();
//					String newUrl = oldUrl.replaceAll("category.htm", catHtml);
//					page.addTargetRequest(newUrl);
//				}
//			}
//			return;
//		}
//		
//		List<Selectable> items = newHtml.xpath("//html/body/div/div[@class='J_TItems']/div/dl[@class='item']").nodes();
//		if(items==null||items.size()==0){
//			return;
//		}
//		
//		// Step2: 获取分类路径  
//		String cat = "";
//		String catPath = "";
//		List<Selectable> paths = newHtml.xpath("//html/body/div/div[@class='j_tcrumb']/div/div/div/ul/li/div").nodes();
//		for (int i = 0; i < paths.size(); i++) {
//			Selectable path = paths.get(i);
//			String pathName = path.xpath("//*/a/text()").get();
//			if (pathName == null) {
//				continue;
//			}
//			if (i == paths.size() - 1) {
//				cat = pathName;
//				catPath = catPath + pathName;
//				continue;
//			}
//			catPath = catPath + pathName + ",";
//		}
//		try {
//			cat = URLEncoder.encode(cat,"UTF-8");
//			catPath = URLEncoder.encode(catPath,"UTF-8");
//		} catch (UnsupportedEncodingException e) {
//		}
//		
//		// Step3: 获取商品列表
//		for (int i = 0; i < items.size(); i++) {
//			Selectable item = items.get(i);
//			String url = item.xpath("//*/dt/a/@href").get();
//			page.addTargetRequest(url + "&cat=" + cat + "&catPath=" + catPath);
//		}
//		
//		// Step4: 获取下一页url 
//		String curPage = newHtml.xpath("//html/body/div/div[@class='J_TItems']/div[@class='pagination']/a[@class='page-cur']/text()").get();
//		Integer nextPageNo = Integer.parseInt(curPage)+1;
//		String nextPageUrl = "";
//		if(oldUrl.contains("pageNo")){
//			nextPageUrl = page.getUrl().get().substring(0, page.getUrl().get().indexOf("pageNo"))+"pageNo="+ (Integer.parseInt(curPage)+1);
//		}else{
//			nextPageUrl = page.getUrl()+"&pageNo="+nextPageNo;
//		}
//		page.addTargetRequest(nextPageUrl);
//		
//	}
//	
//	
//	/**
//	 * 处理商品详情页
//	 * 
//	 * @param page
//	 * @param goods
//	 */
//	private void processGoodsDetail(Page page) {
//		System.out.println(page.getHtml().xpath("//*[@id='J_DetailMeta']").get());
//
//		// 获取商品url
//		String url = page.getUrl().get();
//		if (!url.contains("id")) {
//			return;
//		}
//		TmallGoods goods = new TmallGoods();
//		goods.setUrl(url);
//
//		// 获取商品id
//		Map<String, String> paramsMap = UrlStringUtil.getParamsMap(url);
//		String id = paramsMap.get("id");
//		goods.setId(id);
//
//		// 获取店铺名称
//		String shopName = page.getHtml().xpath("//*[@id='shopExtra']/div[@class='slogo']/a/strong/text()").get();
//		goods.setShopName(shopName);
//
//		// 获取商品名称
//		String name = page.getHtml()
//				.xpath("//*[@id='J_DetailMeta']/div[@class='tm-clear']/div[@class='tb-property']/div/div[@class='tb-detail-hd']/h1/text()")
//				.get();
//		name = name.replace("/", "_");
//		goods.setName(name);
//
//		// 获取商品价格
//		String price = page.getHtml().xpath("//*[@id='J_PromoPrice']/dd/div/span/text()").get().trim();
//		goods.setPrice(price);
//
//		// 获取商品分类
//		try {
//			String cat = paramsMap.get("cat");
//			goods.setCat(URLDecoder.decode(cat, "UTF-8"));
//			String catPath = paramsMap.get("catPath");
//			goods.setCatPath(URLDecoder.decode(catPath, "UTF-8"));
//		} catch (Exception e) {
//		}
//
//		// 获取商品图片
//		List<Selectable> goodsImgs = page.getHtml().xpath("//*[@id='J_UlThumb']/li/a").nodes();
//		String imgUrls = "";
//		for (int i = 0; i < goodsImgs.size(); i++) {
//			Selectable goodsImg = goodsImgs.get(i);
//			String goodsImgUrl = goodsImg.xpath("//*/img/@src").get();
//			goodsImgUrl = goodsImgUrl.replaceAll("_([0-9]+)x([a-z0-9]+).jpg", "");
//			imgUrls = imgUrls  + goodsImgUrl + ",";
//		}
//		goods.setImgUrls(imgUrls.substring(0, imgUrls.length() - 1));
//
//		// 获取颜色 
//		List<Selectable> colorImgs = page.getHtml()
//				.xpath("//*[@id='J_DetailMeta']/div[@class='tm-clear']/div[@class='tb-property']/div/div[@class='tb-key']/div/div/dl[@class='tm-img-prop']/dd/ul/li")
//				.nodes();
//		String colorUrls = "";
//		for (int i = 0; i < colorImgs.size(); i++) {
//			Selectable colorImg = colorImgs.get(i);
//			String colorUrl = colorImg.xpath("//*a/@style").get();
//			colorUrl = colorUrl.replaceAll("background:url\\(", "").replaceAll("\\)([\\s]{0,})center([\\s]{0,})no-repeat;([\\s]{0,})", "");
//			colorUrl = colorUrl.replaceAll("_([0-9]+)x([a-z0-9]+).jpg", "");
//			colorUrls = colorUrls +  colorUrl + ",";
//		}
//		goods.setColorUrls(colorUrls.substring(0, colorUrls.length() - 1));
//
//		// 获取月销量和评价
//		String salesCount = page.getHtml()
//				.xpath("//*[@id='J_DetailMeta']/div[@class='tm-clear']/div[@class='tb-property']/div/ul/li[@class='tm-ind-sellCount']/div/span[2]/text()")
//				.get();
//		String commentsCount = page.getHtml().xpath("//*[@id='J_ItemRates']/div/span[2]/text()").get();
//		goods.setSalesCount(salesCount);
//		goods.setCommentsCount(commentsCount);
//
//		// 获取品牌
//		String brand = page.getHtml().xpath("//*[@id='J_BrandAttr']/div/a/text()").get();
//		goods.setBrand(brand);
//
//		// 获取参数
//		List<Selectable> params = page.getHtml().xpath("//*[@id='J_AttrUL']/li").nodes();
//		for (int i = 0; i < params.size(); i++) {
//			Selectable param = params.get(i);
//			String line = param.xpath("//*/text()").get().replace("&nbsp;", " ");
//			String key = line.split(":")[0];
//			String value = line.split(":")[1];
//			goods.getParams().put(key, value);
//		}
//
//		// 获取商品描述
//		List<Selectable> descImgs = page.getHtml().xpath("//*[@id='description']/div/p/img").nodes();
//		String descUrls = "";
//		for (int i = 0; i < descImgs.size(); i++) {
//			Selectable descImg = descImgs.get(i);
//			String descUrl = descImg.xpath("//*/@src").get();
//			descUrl = descUrl.replaceAll("_([0-9]+)x([a-z0-9]+).jpg", "");
//			descUrls = descUrls  + descUrl + ",";
//		}
//		goods.setDescUrls(descUrls.substring(0, descUrls.length() - 1));
//
//		// 存入內存
//		page.putField("goods" + id, goods);
//	}
//
//	public static void main(String[] args) {
//		Spider spider = Spider.create(new TmallPageProcessorPlus());
//		spider.addUrl(
//			//"http://lalademitao.tmall.com/",
//			"https://lalademitao.tmall.com/search.htm?search=y"
//		);
//		spider.addPipeline(new TmallPipeline());
//		spider.setDownloader(new SeleniumDownloader(5000, new WebDriverPool(), new WebSeleniumAction()));
//		spider.thread(100);
//		spider.setExitWhenComplete(true);
//		spider.start();
//	}
//}